#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
微信自动回复工具主程序入口
可以独立运行和打包为exe文件
默认启动图形界面，支持命令行参数切换到CLI模式
"""

import sys
import os
import time
from pathlib import Path

# 添加itchat导入检查
try:
    import itchat
except ImportError:
    pass  # 在需要时再导入

# 检测是否运行在打包的exe中
def is_frozen():
    """检测是否运行在PyInstaller打包的exe中"""
    return getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')

# 显示初始化提示
def show_initialization_message():
    """显示程序初始化提示"""
    if is_frozen():
        print("[启动] 微信自动回复工具 v1.0")
        print("[初始化] 正在初始化程序组件...")
        print("[提示] 首次运行可能需要几秒钟时间解压文件，请稍候...")
        print()
        # 模拟初始化过程，给用户视觉反馈
        for i in range(3):
            print(f"   [进度] 初始化中{'.' * (i + 1)}")
            time.sleep(0.5)
        print("[完成] 初始化完成！")
        print()

def show_loading_step(step_name, is_exe_mode=True):
    """显示加载步骤提示"""
    if is_exe_mode:
        print(f"   [加载] {step_name}...")
    else:
        print(f"[加载] {step_name}...")

def show_real_loading_progress(step_name, progress_func, is_exe_mode=True):
    """显示真实的加载进度，只在实际加载完成时显示完成状态"""
    import threading
    import time
    
    if is_exe_mode:
        print(f"   [加载] {step_name}...")
    else:
        print(f"[加载] {step_name}...")
    
    # 用于标记加载是否完成
    loading_complete = threading.Event()
    result = None
    exception = None
    
    def load_task():
        """在后台执行加载任务"""
        nonlocal result, exception
        try:
            result = progress_func()
        except Exception as e:
            exception = e
        finally:
            loading_complete.set()
    
    # 启动加载线程
    load_thread = threading.Thread(target=load_task)
    load_thread.daemon = True
    load_thread.start()
    
    # 显示点点点动画，直到加载完成
    prefix = "     " if is_exe_mode else "  "
    dots = 0
    
    while not loading_complete.is_set():
        dots = (dots + 1) % 4
        dot_str = '.' * dots + ' ' * (3 - dots)
        print(f"\r{prefix}加载中{dot_str}", end='', flush=True)
        time.sleep(0.5)
    
    # 清除动画并显示完成状态
    print(f"\r{prefix}{'':20}", end='', flush=True)  # 清除之前的内容
    print(f"\r", end='', flush=True)
    
    if exception:
        if is_exe_mode:
            print(f"   [失败] {step_name}失败")
        else:
            print(f"[失败] {step_name}失败")
        raise exception
    
    if is_exe_mode:
        print(f"   [完成] {step_name}完成")
    else:
        print(f"[完成] {step_name}完成")
    
    return result

def show_real_progress(step_name, progress_func, is_exe_mode=True):
    """显示真实的加载进度"""
    if is_exe_mode:
        print(f"   [加载] {step_name}...")
    else:
        print(f"[加载] {step_name}...")
    
    # 执行实际的加载函数
    result = progress_func()
    
    if is_exe_mode:
        print(f"   [完成] {step_name}完成")
    else:
        print(f"[完成] {step_name}完成")
    
    return result

# 添加src目录到Python路径
current_dir = Path(__file__).parent
src_dir = current_dir.parent
sys.path.insert(0, str(src_dir))

def main():
    """主函数 - 支持 GUI 和 CLI 模式"""
    # 显示初始化提示（仅在exe模式下）
    show_initialization_message()
    
    # 检查是否是 --gui 参数
    if len(sys.argv) >= 2 and '--gui' in sys.argv:
        # 启动 GUI 模式
        exe_mode = is_frozen()
        if not exe_mode:
            print("💬 微信自动回复工具 v1.0")
        
        show_loading_step("检查GUI组件可用性", exe_mode)
        
        try:
            # 第一步：测试tkinter可用性
            def test_tkinter():
                import tkinter
                test_root = tkinter.Tk()
                test_root.withdraw()  # 隐藏测试窗口
                test_root.destroy()   # 立即销毁
                return True
            
            show_real_progress("验证Tkinter环境", test_tkinter, exe_mode)
            
            # 第二步：导入GUI模块（这里是耗时的部分）
            def load_gui_module():
                from wechat_auto_reply.gui import main as gui_main
                return gui_main
            
            gui_main = show_real_loading_progress("加载GUI模块和依赖", load_gui_module, exe_mode)
            
            # 第三步：启动界面
            show_loading_step("启动图形界面", exe_mode)
            gui_main()
            return
        except ImportError as e:
            if "itchat" in str(e):
                print("❌ 缺少微信机器人依赖，请安装itchat库")
                print("请运行: pip install itchat")
            else:
                print("❌ GUI不可用（tkinter未安装）")
                print("解决方案: 重新安装Python时选择完整安装，或安装tkinter包")
            print("请使用命令行模式: python main.py -h")
            return
        except Exception as e:
            print(f"❌ GUI启动失败: {e}")
            if "init.tcl" in str(e) or "Tcl" in str(e):
                print("\n这是一个常见的Windows Tkinter配置问题，可以尝试以下解决方案:")
                print("1. 重新安装Python（选择完整安装）")
                print("2. 或者使用命令行模式进行消息自动回复操作")
                print("\n命令行模式使用示例:")
                print("  python main.py -h")
            else:
                print("请使用命令行模式: python main.py -h")
            return
    
    # 默认启动GUI模式（无参数时）
    if len(sys.argv) == 1:
        # 没有参数时，尝试GUI，失败则显示帮助
        exe_mode = is_frozen()
        if not exe_mode:
            print("💬 微信自动回复工具 v1.0")
            print()
        
        try:
            # 第一步：测试tkinter可用性
            def test_tkinter():
                import tkinter
                test_root = tkinter.Tk()
                test_root.withdraw()  # 隐藏测试窗口
                test_root.destroy()   # 立即销毁
                return True
            
            show_real_progress("验证Tkinter环境", test_tkinter, exe_mode)
            
            # 第二步：导入GUI模块（这里是耗时的部分）
            def load_gui_module():
                from wechat_auto_reply.gui import main as gui_main
                return gui_main
            
            gui_main = show_real_loading_progress("加载GUI模块和依赖", load_gui_module, exe_mode)
            
            # 第三步：启动界面
            show_loading_step("启动图形界面", exe_mode)
            gui_main()
            return
        except ImportError as e:
            if "itchat" in str(e):
                print("⚠️  缺少微信机器人依赖，请安装itchat库")
                print("请运行: pip install itchat")
            else:
                print("⚠️  GUI不可用（tkinter未安装）")
        except Exception as e:
            print(f"❌ GUI启动失败: {e}")
        
        # GUI不可用时显示命令行帮助
        print("⚡ 正在使用命令行模式...")
        print()
        print("使用方法:")
        print("  wechat_auto_reply.exe --gui              # 启动图形界面")
        print("  wechat_auto_reply.exe -h                 # 查看帮助")
        print()
        print("请提供命令行参数来使用微信自动回复功能")
        return
    
    # 有参数时启动CLI
    from wechat_auto_reply.cli import main as cli_main
    cli_main()

if __name__ == "__main__":
    main()